package 高级进阶;
import lombok.SneakyThrows;
import org.junit.Test;

import java.io.File;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.*;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.logging.SimpleFormatter;

/**
 * @author Liangyaoyun
 */
public class 常用工具 {
    @Test
    public void test01() {
        //测试Math
        //返回long值
        System.out.println(Math.round(5.6));
        System.out.println(Math.round(-5.4));
        //返回duoble值
        System.out.println(Math.ceil(1.2));
        //返回duoble值
        System.out.println(Math.floor(1.2));

    }

    @Test
    public void test02() {
        //测试random
        Random random = new Random();
        for (int i = 0; i < 10; i++) {
            System.out.println(random.nextInt(10));
        }
    }

    @Test
    public void test03() {
        //测试Arrays工具
        Integer[] arr = {1, 2, 3, 4, 5};
        Integer[] arr1 = {0};
        Arrays.sort(arr, ((o1, o2) -> o2 - o1));
        System.out.println(Arrays.toString(arr));
        //compare比较两个数组的长度,大于返回正整数，小于返回负数
        System.out.println(Arrays.compare(arr, arr1));
        Integer[] newarr = Arrays.copyOf(arr, arr.length);
        Integer[][] arr2 = {{1, 2,}, {1, 2, 3,}};
        System.out.println(Arrays.deepToString(arr2));
    }

    @Test
    public void test04() {
        //测试队列和栈
        Queue<Integer> queue = new LinkedBlockingQueue<>();
        //flag一但为3则淘汰一人
        int flag = 1;
        //time代表淘汰的人数
        int time = 0;
        for (int i = 1; i < 11; i++) {
            queue.add(i);
        }
        while (time < 9) {
            if (flag != 3) {
                int i = queue.poll();
                queue.add(i);
                flag++;
            } else {
                queue.poll();
                flag = 1;
                time++;
            }
        }
        System.out.println(queue.poll());
    }

    @Test
    @SneakyThrows
    public void test05() {
        //测试日期时间工具
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss.SSS");
        // 格式化: date -> string
        // 将date按照我们的模板来进行转换，最终返回一个自定义格式的字符串
        System.out.println(sdf.format(new Date()));
        // 解析: string - date
        String dateStr = "2021年06月10日 14:18:33.666";
        System.out.println(sdf.parse(dateStr));
        //新的日期时间工具
        System.out.println(LocalDateTime.now());
        System.out.println(LocalDate.of(2023, 6, 17));
        DateTimeFormatter dateTimeFormatter=DateTimeFormatter.ofPattern("yyyy-MM-dd");
        System.out.println(dateTimeFormatter);
    }
    @Test
    //如果目录不存在的话可以会存在异常，所以需要手动加异常处理
    public void test06() throws IOException {
        File file=new File("io","name");
        System.out.println("文件名字："+file.getName());
        System.out.println("获取文件路径"+file.getPath());
        System.out.println("获取文件长度："+file.length());
        System.out.println("文件最后修改日期："+new Date(file.lastModified()));
        System.out.println("文件是否可读："+file.canRead());
        System.out.println("文件是否可写："+file.canWrite());
        System.out.println("是否为文件："+file.isFile());
        System.out.println("是否为目录"+file.isDirectory());
        System.out.println("是否为隐藏文件："+file.isHidden());
        System.out.println("是否为绝对路径："+file.isAbsolute());
        System.out.println("文件绝对路径："+file.getAbsolutePath());
        File newfile=new File("io/strat-重命名.txt");
        System.out.println(1 + (2 + 3) + "4" + 5 + 6);
    }
}
